To be added:目录
1.python求整
1 | a = 4//3 |
2.位操作
1 | a = 0011 1100 |
4.lambda
lambda 表达式通常在需要一个函数,但是又不想费神(233)去命名一个函数时使用,也就是匿名函数。1
2
3
4
5
6
7add = lambda x,y : x+y
add(1,2)
#3
#-----------
a = [1,-3,2,4]
# key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元# 素来进行排序。
b = sorted(a,key =lambda x:abs(x)
5.enumerate
- python 内置函数
- 对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
{.line-numbers} 1
2
3
4
5
6
7
8
9a =[1,3,4,6]
for index,item in enumerate(a):
print(index,item)
'''
0 1
1 3
2 4
3 6
'''
6.set 求交 并 差集
set的遍历是无序的。
不同机器 不同时间跑出的结果都不一样。
- 交集 : x&y
- 并集 : x|y
- 差集 : x-y
7.filter 函数
filter函数用于过滤序列,过滤掉不符合条件的元素,python2中返回新列表,python3中返回可迭代对象。
用法
filter(function,iterable)
1 | a = filter(lambda x: x % 2 ==0,range(10)) |
8.python 中的None True False
1 | list1 = [] |
判断对象是否为None 主要由以下写法:1
2
3
4
5
6
7if X is None:
pass
if not X:
pass
# 当X为None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()这些时,not X为真,即无法分辨出他们之间的不同。
if not X:
pass
在Python中,None、空列表[]、空字典{}、空元组()、0等一系列代表空和无的对象会被转换成False。除此之外的其它对象都会被转化成True。
- None是一个特殊的常量.
- None和False不同。
- None不是0。
- None不是空字符串。
- None和任何其他的数据类型比较永远返回False。
- None有自己的数据类型NoneType。
- 你可以将None复制给任何变量,但是你不能创建其他NoneType对象。
9.牛逼的sum函数。
sum()的语法是:
sum(iterable,start)
The sum() function adds start and items of the given iterable from left to right.
sum()参数:
iterable- iterable (list, tuple, dict etc) whose item’s sum is to be found. Normally, items of the iterable should be numbers.
可以是list 元组 字典等可迭代对象。
start (optional) - this value is added to the sum of items of the iterable. The default value of start is 0 (if omitted)
默认为0.也可以是[]等。1
2
3
4a = [[1,3,5,7,9],[2,4,6,8]]
x = sum(a,[])
print(x)
# [1 3 5 7 9 2 4 6 8]
10. 单引号 双引号 三引号
- 1.单引号和双引号是通用的。
- 2.在要表达的字符串中有单引号出现时使用双引号方便。
- 3.在要表达的字符串中有单引号出现时使用单引号方便。
- 4.三引号的出现是直接可以做在引号内回车。当然还可以做注释块啦。
- 5.1234均体现了python的任性化。
{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11
12
13
14 str1 = " I'm OK, thank u"
str2 = 'Hello,MI "Fans"'
str3 = ''' Are
You
OK
'''
print(str1,str2,str3)
'''
I'm OK, thank u
Hello,MI "Fans"
Are
You
OK
'''
11. python 赋值 浅拷贝 深拷贝
1.直接赋值。其实就是对象的引用。(别名)。赋值引用,都指向同一个对象。
2.浅拷贝。拷贝父对象,不会拷贝父对象的内部子对象。两者是一个独立的对象,但他们的子对象还是指向统一对象(是引用)。
3.深拷贝。copy模块的deepcopy()方法,完全拷贝了父对象个其子对象。两者是完全独立的。{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11 import copy
a = [1,2,3,[4,5,6]]
b = a.copy()
a[3].append(7)
c = copy.deepcopy(a)
print(a,b,c)
print(id(a),id(b),id(c))
# [1, 2, 3, [4, 5, 6, 7]] [1, 2, 3, [4, 5, 6, 7]] [1, 2, 3, [4, 5, 6, 7]]
# 2164258934920 2164258672008 2164258840008
print(id(a[1]),id(b[1]))
1616669792 1616669792
4.关于*
{.line-numbers}
1
2
3
4
5 a = [[]] * 2
id(a[0])
#2653548226632
id(a[1])
#2653548226632
12.装饰函数
参见装饰函数。写的是真好。
13.map/reduce函数。起源于Google鼎鼎大名 Map/Reduce论文。
python中map()、filter()、reduce()这三个都是应用于序列的内置函数。
map(function, iterable, …)
map()函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list(python2.7) Iterator(python3 使用之前需要list化)返回。
stackoverflow上有人说可以这样理解map():{.line-numbers}
1
2
3
4
5
6
7
8
9
10 map(f, iterable)
#基本上等于:
[f(x) for x in iterable]
def f(x):
return abs(x)
for item in map(f,[1,-2,3,-4]):
print(item)
# 1 2 3 4
14.赋值
多重赋值:x=y=z=1
多元赋值:x,y,z=1,3,’a string’
增量赋值:x+=1
15.
sys.argv是传递给python脚本的命令行参数【字符串】列表
argv[0]为该脚本自身路径,其余为命令行参数。
和shell脚本的 $0 $1 $2 $3 $4一样。
16.zip 函数
zip()函数用于将可迭代的对象(如list dict )作为参数,将对象中对应元素进行打包成一个个元组,然后返回由这些元组组成的对象。返回组成的对象节省了内存可以使用list()俩将输出对象那个转换为列表.如果各个迭代器元素个数不一样 则返回列表长度于最短对象相同。zip(*zipped) 解压缩。
{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11
12
13
14 zipped = zip([1,2,3],[4,5,6])
zipped
#<zip at 0x16fd026dbc8>
list(zipped)
[(1, 4), (2, 5), (3, 6)]
a,b = zip(*zipped) #error 了 很奇怪
zipped = zip([1,2,3],[4,5,6]) ##这样就可以 很奇怪
a,b = zip(*zipped)
a
(1,2,3)
b
(4,5,6)
17 .join()函数
用于将序列中的元素以指定的字符连接生成一个新的字符串。参数可以是元组 列表 字典 字符串。
语法:str.join(sequence){.line-numbers}
1
2
3
4
5
6
7
8
9
a = ['1','2','3']
st = ''.join(a)
#'123'
#对于字典类型 只会将key进行连接
seq = {'hello':'nihao','good':2,'boy':3,'doiido':4}
print('-'.join(seq))
# hello-good-boy-doiido
18 可迭代对象。
可以直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、set、str等;
一类是generator,包括生成器和带yield的generator function。
这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
可以使用isinstance()判断一个对象是否是Iterable对象:
19.python中的元组。
元组数据结构类似于list 但是元素不能修改类似于string 但是又可以进行拼接 截取操作。
20.为什么的大部分语言都是0-based索引。
首先明确索引脚标表示的是对首元素的偏移量。基于0-based的脚标表示 这个在汇编语言时代可以直接使用MOV指令比较方便。即下标可以直接等价成MOV值到偏移寄存器里,而基址寄存器里面保存的是数组头的地址,结合这两个就可以寻址取值。在python中 据python之父介绍 使用0-based的原因主要是python的半开区间切片语法与0-based完美契合。Fortan使用1-based。
21.python 字符串拼接
简介两种:
- 1 str1 + str2
- 2 ‘’.join([‘1’,’2’])
{.line-numbers}
1
2
3
4
5
6
7
8 str1 = "abc"
str2 = 'def'
print(str1 + str1)
# ""abcdef
print(''.join(['1','2']))
# '12'
print('a'.join(['1','2']))
#'1a2'
22.python 格式化输出
- 整数输出
- %o 八进制
- %d 十进制
- %x 十六进制
1 | print('%d'%20) |
- 浮点数输出
- %f 默认保留小数点后六位。默认进行了四舍五入
%.3f 保留三位小数点
%e 保留小数点后六位 以指数形式
- %.3e 保留三位小数 科学计数法
1 | print('%f'%20) |
- 字符串输出。
%s
{.line-number} 1
2
3
4
5
6
7
8
9
10print('%s'% 'hello world')
#hello world
print('%20s'% 'hello world') #右对齐20位
# hello world
print('%-20s'% 'hello world') #左对齐20位
#hello world
print('%10.2s' % 'hello world') # 右对齐,取2位
# he
print('%-10.2s' % 'hello world') # 左对齐,取2位
#heformat用法。相对基本格式化采用的%方法,format功能更为强大。
- 不带编号,即“{}”
- 带数字编号,可调换顺序,即“{1}”、“{2}”
- 带关键字,即“{a}”、“{tom}”
1 |
|